package cn.itcast.web.task;


import cn.itcast.domain.cargo.Export;
import cn.itcast.domain.cargo.ExportExample;
import cn.itcast.service.cargo.ExportService;
import cn.itcast.vo.ExportResult;
import com.alibaba.dubbo.config.annotation.Reference;
import org.apache.cxf.jaxrs.client.WebClient;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 定时执行的java类
 *   代码逻辑：
 *     和普通的java类是一样
 */
public class ExportJob {

    @Reference
    private ExportService exportService;

    /**
     * 定时执行的java方法
     *   需求：每5秒钟，打印系统时间
     *   参数：无参
     *   返回值：没有返回值
     */
//    public void execute() {
//        //打印系统时间
//        String time = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
//        System.out.println("当前时间："+time);
//    }

    /**
     * 定时查询保运结果
     */
    public void execute() {
        //1、查询所有已经发送到海关没有保运结果（state=2）的报运单
        ExportExample example = new ExportExample();
        ExportExample.Criteria criteria = example.createCriteria();
        criteria.andStateEqualTo(2L);
        List<Export> list = exportService.findAll(example);
        System.out.println("定时查询："+list.size()+"条数据还有没有保运结果");
        //2、循环通过webclient调用海关平台查询保运结果
        if(list != null) {
            for (Export export : list) {
                WebClient wc = WebClient.create("http://localhost:9001/ws/export/ep/"+export.getId());
                ExportResult exportResult = wc.get(ExportResult.class);
                System.out.println("调用海关返回state=="+exportResult.getState());
                //3、判断报运结果是否为正常状态（state == 2 不需要做任务处理）
                if(exportResult.getState() != 2) {
                    //4、如果保运结果是最终状态（state！=2），更新自己的数据库
                    exportService.updateE(exportResult);
                }
            }
        }

    }
}
